資料清理及驗證規則

林嶔 (Lin, Chin)

Lesson 6

第一節:驗證規則設定-1(1)

– 一般來說,資料進來以後我們會設定驗證規則,如果不符合此一規則就刪除或重新檢視。

  1. 不正確的數據(Incorrect data):如年齡>130歲

  2. 不準確的數據(Inaccurate data):如年齡實際為50歲的人,被紀錄為60歲

  3. 重複的數據(Duplicate data):如重複key-in的問卷

  4. 不完整的數據(Incomplete data):不該遺漏而遺漏的數據

  5. 不一致的數據(Inconsistent data):如洗腎患者腎絲球過濾率卻有90 ml/min/1.73m2

  6. 違反規則(Rule violations):如收案日期為2010年以前,卻出現2013年的資料

第一節:驗證規則設定-1(2)

– 這個資料是由門診護理師Key-in填入,按照計劃目標,所有病人每3個月追蹤一次(低於3個月不能給補助)。

– 現在你是腎臟醫學會核發衛教補助的承辦人員,你希望了解一下哪些紀錄是有問題的,而找到這些紀錄後你將要通知該醫院的門診護理師,請他再查閱紙本資料後重新Key-in

dat = read.csv("data4_1.csv", header = TRUE, fileEncoding = 'CP950') 
head(dat)
##   Patient       Date MDRD.GFR Stage   WBC  RBC  HB  Hct  MCV Urea.Nitrogen
## 1    1472  2011/5/31     15.9     4 10.10 2.76 8.7 27.0 98.0            75
## 2    1472   2011/8/8     24.0     4  5.79 1.80 5.7 17.9 99.4            41
## 3    1472 2011/10/17     22.7     4  5.20 2.44 7.8 23.0 94.3            49
## 4    1472  2012/1/10     18.7     4 12.99 2.95 9.4 28.2 95.6            46
## 5    1472  2013/5/14     30.4     3  6.78 3.02 9.7 30.0 99.3            48
## 6    1472  2013/8/22     26.8     4  6.88 3.73 8.6 26.0 95.2            82
##   Creatinine Uric.Acid  Na   K Albumin
## 1        3.0       3.9 139 3.3     4.2
## 2        2.1       4.8 143 4.6     4.2
## 3        2.2       4.7 146 4.8     4.5
## 4        2.6       4.0 141 4.2     4.6
## 5        1.7       3.9 141 4.4     4.1
## 6        1.9       3.0 138 4.1     4.3

第一節:驗證規則設定-1(3)

class(dat[,"Date"])
## [1] "factor"
dat$Date = as.Date(dat[,"Date"])
test.date = c("2011/01/05", "2011/09/31", "2011/02/29", "2016/02/29")
test.date = as.Date(test.date)
test.date
## [1] "2011-01-05" NA           NA           "2016-02-29"
dat$Wrong.Date = is.na(dat$Date)
dat[dat$Wrong.Date == TRUE,]
##  [1] Patient       Date          MDRD.GFR      Stage         WBC          
##  [6] RBC           HB            Hct           MCV           Urea.Nitrogen
## [11] Creatinine    Uric.Acid     Na            K             Albumin      
## [16] Wrong.Date   
## <0 rows> (or 0-length row.names)

– 我們稍微整理一下規則1的程式碼,老師會把這串程式碼整理成這樣

#Read data
dat = read.csv("data4_1.csv", header = TRUE, fileEncoding = 'CP950') 

#Rule 1: check date-format
dat$Date = as.Date(dat[,"Date"])
dat$Wrong.Date = is.na(dat$Date)
#dat[dat$Wrong.Date == TRUE,]

#Rule 2: ...

第一節:驗證規則設定-1(4)

– 可以利用之前學過的函數「%in%」,還記得怎麼用嗎?

dat$Wrong.Stage = !dat$Stage %in% 1:5

第一節:驗證規則設定-1(5)

– 索引函數可以幫助我們設定規則,値得注意的是,未來如果我們想要將連續變項『血壓値』轉換為類別變項『高血壓』時,可以透過類似的方式。

dat$Wrong.GFR[dat$MDRD.GFR>150 | dat$MDRD.GFR<0] = TRUE
dat$Wrong.GFR[dat$MDRD.GFR<=150 & dat$MDRD.GFR>=0] = FALSE
dat[dat$Wrong.GFR == TRUE, c("Patient", "Date", "MDRD.GFR", "Stage", "Wrong.GFR")]
##        Patient       Date MDRD.GFR Stage Wrong.GFR
## NA          NA       <NA>       NA    NA        NA
## NA.1        NA       <NA>       NA    NA        NA
## NA.2        NA       <NA>       NA    NA        NA
## NA.3        NA       <NA>       NA    NA        NA
## NA.4        NA       <NA>       NA    NA        NA
## NA.5        NA       <NA>       NA    NA        NA
## NA.6        NA       <NA>       NA    NA        NA
## NA.7        NA       <NA>       NA    NA        NA
## NA.8        NA       <NA>       NA    NA        NA
## NA.9        NA       <NA>       NA    NA        NA
## NA.10       NA       <NA>       NA    NA        NA
## NA.11       NA       <NA>       NA    NA        NA
## NA.12       NA       <NA>       NA    NA        NA
## NA.13       NA       <NA>       NA    NA        NA
## NA.14       NA       <NA>       NA    NA        NA
## NA.15       NA       <NA>       NA    NA        NA
## NA.16       NA       <NA>       NA    NA        NA
## NA.17       NA       <NA>       NA    NA        NA
## NA.18       NA       <NA>       NA    NA        NA
## NA.19       NA       <NA>       NA    NA        NA
## NA.20       NA       <NA>       NA    NA        NA
## NA.21       NA       <NA>       NA    NA        NA
## NA.22       NA       <NA>       NA    NA        NA
## NA.23       NA       <NA>       NA    NA        NA
## NA.24       NA       <NA>       NA    NA        NA
## NA.25       NA       <NA>       NA    NA        NA
## NA.26       NA       <NA>       NA    NA        NA
## NA.27       NA       <NA>       NA    NA        NA
## NA.28       NA       <NA>       NA    NA        NA
## NA.29       NA       <NA>       NA    NA        NA
## NA.30       NA       <NA>       NA    NA        NA
## NA.31       NA       <NA>       NA    NA        NA
## NA.32       NA       <NA>       NA    NA        NA
## NA.33       NA       <NA>       NA    NA        NA
## NA.34       NA       <NA>       NA    NA        NA
## NA.35       NA       <NA>       NA    NA        NA
## NA.36       NA       <NA>       NA    NA        NA
## NA.37       NA       <NA>       NA    NA        NA
## NA.38       NA       <NA>       NA    NA        NA
## NA.39       NA       <NA>       NA    NA        NA
## NA.40       NA       <NA>       NA    NA        NA
## NA.41       NA       <NA>       NA    NA        NA
## NA.42       NA       <NA>       NA    NA        NA
## NA.43       NA       <NA>       NA    NA        NA
## NA.44       NA       <NA>       NA    NA        NA
## NA.45       NA       <NA>       NA    NA        NA
## NA.46       NA       <NA>       NA    NA        NA
## NA.47       NA       <NA>       NA    NA        NA
## NA.48       NA       <NA>       NA    NA        NA
## NA.49       NA       <NA>       NA    NA        NA
## NA.50       NA       <NA>       NA    NA        NA
## NA.51       NA       <NA>       NA    NA        NA
## NA.52       NA       <NA>       NA    NA        NA
## NA.53       NA       <NA>       NA    NA        NA
## NA.54       NA       <NA>       NA    NA        NA
## NA.55       NA       <NA>       NA    NA        NA
## NA.56       NA       <NA>       NA    NA        NA
## NA.57       NA       <NA>       NA    NA        NA
## NA.58       NA       <NA>       NA    NA        NA
## NA.59       NA       <NA>       NA    NA        NA
## NA.60       NA       <NA>       NA    NA        NA
## NA.61       NA       <NA>       NA    NA        NA
## NA.62       NA       <NA>       NA    NA        NA
## NA.63       NA       <NA>       NA    NA        NA
## NA.64       NA       <NA>       NA    NA        NA
## NA.65       NA       <NA>       NA    NA        NA
## NA.66       NA       <NA>       NA    NA        NA
## NA.67       NA       <NA>       NA    NA        NA
## NA.68       NA       <NA>       NA    NA        NA
## NA.69       NA       <NA>       NA    NA        NA
## NA.70       NA       <NA>       NA    NA        NA
## NA.71       NA       <NA>       NA    NA        NA
## NA.72       NA       <NA>       NA    NA        NA
## NA.73       NA       <NA>       NA    NA        NA
## NA.74       NA       <NA>       NA    NA        NA
## NA.75       NA       <NA>       NA    NA        NA
## NA.76       NA       <NA>       NA    NA        NA
## NA.77       NA       <NA>       NA    NA        NA
## NA.78       NA       <NA>       NA    NA        NA
## NA.79       NA       <NA>       NA    NA        NA
## NA.80       NA       <NA>       NA    NA        NA
## NA.81       NA       <NA>       NA    NA        NA
## NA.82       NA       <NA>       NA    NA        NA
## NA.83       NA       <NA>       NA    NA        NA
## NA.84       NA       <NA>       NA    NA        NA
## NA.85       NA       <NA>       NA    NA        NA
## NA.86       NA       <NA>       NA    NA        NA
## NA.87       NA       <NA>       NA    NA        NA
## NA.88       NA       <NA>       NA    NA        NA
## NA.89       NA       <NA>       NA    NA        NA
## NA.90       NA       <NA>       NA    NA        NA
## NA.91       NA       <NA>       NA    NA        NA
## NA.92       NA       <NA>       NA    NA        NA
## NA.93       NA       <NA>       NA    NA        NA
## NA.94       NA       <NA>       NA    NA        NA
## NA.95       NA       <NA>       NA    NA        NA
## NA.96       NA       <NA>       NA    NA        NA
## NA.97       NA       <NA>       NA    NA        NA
## NA.98       NA       <NA>       NA    NA        NA
## 5846      1118 2009-11-12    227.7     1      TRUE
## 5847      1118 2014-03-10    217.1     1      TRUE
## 5848      1118 2014-06-16    175.9     1      TRUE
## NA.99       NA       <NA>       NA    NA        NA
## 6019      1290 2010-09-19    190.9     1      TRUE
## 6020      1290 2010-11-16    190.9     1      TRUE
## 6021      1290 2010-12-15    190.9     1      TRUE
## 6022      1290 2011-03-07    189.9     1      TRUE
## 6023      1290 2011-05-31    189.9     1      TRUE
## 6024      1290 2011-08-27    189.9     1      TRUE
## 6025      1290 2011-11-15    189.9     1      TRUE
## NA.100      NA       <NA>       NA    NA        NA
## NA.101      NA       <NA>       NA    NA        NA
## NA.102      NA       <NA>       NA    NA        NA
## NA.103      NA       <NA>       NA    NA        NA
## NA.104      NA       <NA>       NA    NA        NA
## NA.105      NA       <NA>       NA    NA        NA
## NA.106      NA       <NA>       NA    NA        NA
## NA.107      NA       <NA>       NA    NA        NA
## NA.108      NA       <NA>       NA    NA        NA
## NA.109      NA       <NA>       NA    NA        NA
## NA.110      NA       <NA>       NA    NA        NA
## NA.111      NA       <NA>       NA    NA        NA
## NA.112      NA       <NA>       NA    NA        NA
## NA.113      NA       <NA>       NA    NA        NA
## NA.114      NA       <NA>       NA    NA        NA
## NA.115      NA       <NA>       NA    NA        NA
## NA.116      NA       <NA>       NA    NA        NA
## NA.117      NA       <NA>       NA    NA        NA
## NA.118      NA       <NA>       NA    NA        NA
## NA.119      NA       <NA>       NA    NA        NA
## NA.120      NA       <NA>       NA    NA        NA
## NA.121      NA       <NA>       NA    NA        NA
## NA.122      NA       <NA>       NA    NA        NA
## NA.123      NA       <NA>       NA    NA        NA
## NA.124      NA       <NA>       NA    NA        NA
## NA.125      NA       <NA>       NA    NA        NA
## NA.126      NA       <NA>       NA    NA        NA
## 7795       844 2009-02-04    177.5     1      TRUE
## 7799       844 2010-03-10    175.9     1      TRUE
## NA.127      NA       <NA>       NA    NA        NA
## NA.128      NA       <NA>       NA    NA        NA
## NA.129      NA       <NA>       NA    NA        NA
## NA.130      NA       <NA>       NA    NA        NA
## NA.131      NA       <NA>       NA    NA        NA
## NA.132      NA       <NA>       NA    NA        NA
## NA.133      NA       <NA>       NA    NA        NA
## NA.134      NA       <NA>       NA    NA        NA
## NA.135      NA       <NA>       NA    NA        NA
## NA.136      NA       <NA>       NA    NA        NA
## NA.137      NA       <NA>       NA    NA        NA
## 8260      1879 2012-08-15    162.0     1      TRUE
## NA.138      NA       <NA>       NA    NA        NA
## NA.139      NA       <NA>       NA    NA        NA
## NA.140      NA       <NA>       NA    NA        NA
## NA.141      NA       <NA>       NA    NA        NA
## NA.142      NA       <NA>       NA    NA        NA
## NA.143      NA       <NA>       NA    NA        NA
## NA.144      NA       <NA>       NA    NA        NA
## NA.145      NA       <NA>       NA    NA        NA
## NA.146      NA       <NA>       NA    NA        NA
## NA.147      NA       <NA>       NA    NA        NA
## NA.148      NA       <NA>       NA    NA        NA
## NA.149      NA       <NA>       NA    NA        NA
## NA.150      NA       <NA>       NA    NA        NA
## NA.151      NA       <NA>       NA    NA        NA
## NA.152      NA       <NA>       NA    NA        NA
## NA.153      NA       <NA>       NA    NA        NA
## NA.154      NA       <NA>       NA    NA        NA
## NA.155      NA       <NA>       NA    NA        NA
## NA.156      NA       <NA>       NA    NA        NA
## NA.157      NA       <NA>       NA    NA        NA
## NA.158      NA       <NA>       NA    NA        NA
## NA.159      NA       <NA>       NA    NA        NA
## NA.160      NA       <NA>       NA    NA        NA
## NA.161      NA       <NA>       NA    NA        NA
## NA.162      NA       <NA>       NA    NA        NA
## NA.163      NA       <NA>       NA    NA        NA
## NA.164      NA       <NA>       NA    NA        NA
## NA.165      NA       <NA>       NA    NA        NA
## NA.166      NA       <NA>       NA    NA        NA
## NA.167      NA       <NA>       NA    NA        NA
## NA.168      NA       <NA>       NA    NA        NA
## NA.169      NA       <NA>       NA    NA        NA
## NA.170      NA       <NA>       NA    NA        NA
## NA.171      NA       <NA>       NA    NA        NA
## NA.172      NA       <NA>       NA    NA        NA
## NA.173      NA       <NA>       NA    NA        NA
## 9464       397 2007-07-02    226.3     1      TRUE
## 9465       397 2007-07-16    174.9     1      TRUE
## NA.174      NA       <NA>       NA    NA        NA
## 9467       397 2007-07-30    174.9     1      TRUE
## 9468       397 2007-08-13    174.9     1      TRUE
## 9469       397 2007-09-03    226.3     1      TRUE
## 9471       397 2007-10-22    174.9     1      TRUE
## 9472       397 2007-11-26    226.3     1      TRUE
## 9473       397 2008-02-18    223.5     1      TRUE
## NA.175      NA       <NA>       NA    NA        NA
## NA.176      NA       <NA>       NA    NA        NA
## NA.177      NA       <NA>       NA    NA        NA
## NA.178      NA       <NA>       NA    NA        NA
## NA.179      NA       <NA>       NA    NA        NA
## NA.180      NA       <NA>       NA    NA        NA
## NA.181      NA       <NA>       NA    NA        NA
## NA.182      NA       <NA>       NA    NA        NA
## NA.183      NA       <NA>       NA    NA        NA
## NA.184      NA       <NA>       NA    NA        NA
## NA.185      NA       <NA>       NA    NA        NA
## NA.186      NA       <NA>       NA    NA        NA
## NA.187      NA       <NA>       NA    NA        NA
## NA.188      NA       <NA>       NA    NA        NA
## NA.189      NA       <NA>       NA    NA        NA
## 10960      910 2009-07-03    151.3     1      TRUE
## 10962      910 2009-11-14    151.3     1      TRUE
## 10963      910 2009-12-05    151.3     1      TRUE
## 10969      910 2010-06-21    179.1     1      TRUE
## 10973     1087 2010-01-16    151.3     1      TRUE
## NA.190      NA       <NA>       NA    NA        NA
## NA.191      NA       <NA>       NA    NA        NA
## 11979     1600 2011-11-22    201.1     1      TRUE
## 12257     2211 2014-03-14    157.3     1      TRUE
## NA.192      NA       <NA>       NA    NA        NA
## NA.193      NA       <NA>       NA    NA        NA
## NA.194      NA       <NA>       NA    NA        NA
## NA.195      NA       <NA>       NA    NA        NA
## NA.196      NA       <NA>       NA    NA        NA
## NA.197      NA       <NA>       NA    NA        NA
## NA.198      NA       <NA>       NA    NA        NA
## NA.199      NA       <NA>       NA    NA        NA
## NA.200      NA       <NA>       NA    NA        NA
## NA.201      NA       <NA>       NA    NA        NA
## NA.202      NA       <NA>       NA    NA        NA
## NA.203      NA       <NA>       NA    NA        NA
## NA.204      NA       <NA>       NA    NA        NA
## NA.205      NA       <NA>       NA    NA        NA
## NA.206      NA       <NA>       NA    NA        NA
## NA.207      NA       <NA>       NA    NA        NA
## NA.208      NA       <NA>       NA    NA        NA
## NA.209      NA       <NA>       NA    NA        NA
## NA.210      NA       <NA>       NA    NA        NA
## NA.211      NA       <NA>       NA    NA        NA
## NA.212      NA       <NA>       NA    NA        NA
## NA.213      NA       <NA>       NA    NA        NA
## NA.214      NA       <NA>       NA    NA        NA
## NA.215      NA       <NA>       NA    NA        NA
## NA.216      NA       <NA>       NA    NA        NA
## NA.217      NA       <NA>       NA    NA        NA
## NA.218      NA       <NA>       NA    NA        NA
## NA.219      NA       <NA>       NA    NA        NA
## NA.220      NA       <NA>       NA    NA        NA
## NA.221      NA       <NA>       NA    NA        NA
## 13317      797 2009-10-20    176.1     1      TRUE
## NA.222      NA       <NA>       NA    NA        NA
## NA.223      NA       <NA>       NA    NA        NA
## NA.224      NA       <NA>       NA    NA        NA
## NA.225      NA       <NA>       NA    NA        NA
## NA.226      NA       <NA>       NA    NA        NA
## NA.227      NA       <NA>       NA    NA        NA
## NA.228      NA       <NA>       NA    NA        NA
## 13395      894 2009-11-26    601.5     1      TRUE
## NA.229      NA       <NA>       NA    NA        NA
## NA.230      NA       <NA>       NA    NA        NA
## NA.231      NA       <NA>       NA    NA        NA
## 13465      111 2007-03-10    358.6     1      TRUE
## NA.232      NA       <NA>       NA    NA        NA
## NA.233      NA       <NA>       NA    NA        NA
## NA.234      NA       <NA>       NA    NA        NA
## NA.235      NA       <NA>       NA    NA        NA
## NA.236      NA       <NA>       NA    NA        NA
## NA.237      NA       <NA>       NA    NA        NA
## NA.238      NA       <NA>       NA    NA        NA
## NA.239      NA       <NA>       NA    NA        NA
dat[dat$Wrong.GFR == TRUE & !is.na(dat$Wrong.GFR), c("Patient", "Date", "MDRD.GFR", "Stage", "Wrong.GFR")]
##       Patient       Date MDRD.GFR Stage Wrong.GFR
## 5846     1118 2009-11-12    227.7     1      TRUE
## 5847     1118 2014-03-10    217.1     1      TRUE
## 5848     1118 2014-06-16    175.9     1      TRUE
## 6019     1290 2010-09-19    190.9     1      TRUE
## 6020     1290 2010-11-16    190.9     1      TRUE
## 6021     1290 2010-12-15    190.9     1      TRUE
## 6022     1290 2011-03-07    189.9     1      TRUE
## 6023     1290 2011-05-31    189.9     1      TRUE
## 6024     1290 2011-08-27    189.9     1      TRUE
## 6025     1290 2011-11-15    189.9     1      TRUE
## 7795      844 2009-02-04    177.5     1      TRUE
## 7799      844 2010-03-10    175.9     1      TRUE
## 8260     1879 2012-08-15    162.0     1      TRUE
## 9464      397 2007-07-02    226.3     1      TRUE
## 9465      397 2007-07-16    174.9     1      TRUE
## 9467      397 2007-07-30    174.9     1      TRUE
## 9468      397 2007-08-13    174.9     1      TRUE
## 9469      397 2007-09-03    226.3     1      TRUE
## 9471      397 2007-10-22    174.9     1      TRUE
## 9472      397 2007-11-26    226.3     1      TRUE
## 9473      397 2008-02-18    223.5     1      TRUE
## 10960     910 2009-07-03    151.3     1      TRUE
## 10962     910 2009-11-14    151.3     1      TRUE
## 10963     910 2009-12-05    151.3     1      TRUE
## 10969     910 2010-06-21    179.1     1      TRUE
## 10973    1087 2010-01-16    151.3     1      TRUE
## 11979    1600 2011-11-22    201.1     1      TRUE
## 12257    2211 2014-03-14    157.3     1      TRUE
## 13317     797 2009-10-20    176.1     1      TRUE
## 13395     894 2009-11-26    601.5     1      TRUE
## 13465     111 2007-03-10    358.6     1      TRUE

練習1:設置其他生化質的驗證規則

  1. 請各位同學選1個生化質,並為他設置連續變項的驗證規則

  2. 請同學檢查Stage與MDRD.GFR之關係是否有錯誤

– Stage與GFR之關係:1 - 90以上、2 - 60至90、3 - 30至60、4 - 15至30、5 - 15以下

練習1答案

#Read data
dat = read.csv("data4_1.csv", header = TRUE, fileEncoding = 'CP950') 

#Rule 1: check date-format
dat$Date = as.Date(dat[,"Date"])
dat$Wrong.Date = is.na(dat$Date)

#Rule 2: check WBC
dat$Wrong.WBC[dat$WBC < 4 | dat$WBC > 9] = TRUE
dat$Wrong.WBC[dat$WBC >= 4 & dat$WBC <= 9] = FALSE

#Rule 3: check Stage & MDRD.GFR
dat$my.Stage[dat$MDRD.GFR >= 90] = 1
dat$my.Stage[dat$MDRD.GFR >= 60 & dat$MDRD.GFR < 90] = 2
dat$my.Stage[dat$MDRD.GFR >= 30 & dat$MDRD.GFR < 60] = 3
dat$my.Stage[dat$MDRD.GFR >= 15 & dat$MDRD.GFR < 30] = 4
dat$my.Stage[dat$MDRD.GFR < 15] = 5
dat$Wrong.Stage = (dat$my.Stage != dat$Stage)

第二節:驗證規則設定-2(1)

– 先想步驟,好好思考該怎樣做?

第二節:驗證規則設定-2(2)

– 還記得怎樣了解個案數嗎?可以透過函數「levels()」以及函數「length()」的組合,但在最開始的時候我們要先確定變數『Patient』是否為因子,若不是則必須先轉換為因子

class(dat$Patient)
## [1] "integer"
levels.Patient = levels(as.factor(dat$Patient))
n.Patient = length(levels.Patient)
n.Patient
## [1] 2309
x = rep(NA, n.Patient)

– 還記得上一節課如何教大家寫迴圈函數嗎?先令『i = 1』之後再開始

– 需要特別注意的是,『levels.Patient』是文字向量,而『dat$Patient』則是整數向量,雖然在這個案例中直接檢索是可以的,但最好還是先轉換成同樣的屬性比較不會出錯

– 由於整數轉文字比較不會出錯,所以最好是把『dat$Patient』轉成文字再比較

i = 1
subdat = dat[dat$Patient==levels.Patient[i],]
subdat
##       Patient       Date MDRD.GFR Stage WBC RBC  HB  Hct MCV Urea.Nitrogen
## 12329       1 2006-05-12     13.1     5  NA  NA  NA   NA  NA            NA
## 12330       1 2006-06-19     10.1     5  NA  NA 9.4 28.9  NA            61
## 12331       1 2010-07-21      5.1     5  NA  NA  NA   NA  NA            NA
##       Creatinine Uric.Acid  Na   K Albumin Wrong.Date Wrong.WBC my.Stage
## 12329        5.0       5.6 142 5.7     2.5      FALSE        NA        5
## 12330        6.3        NA 143 3.1      NA      FALSE        NA        5
## 12331       11.2        NA  NA  NA      NA      FALSE        NA        5
##       Wrong.Stage
## 12329       FALSE
## 12330       FALSE
## 12331       FALSE

第二節:驗證規則設定-2(3)

– 如果個案僅申報一筆資料就不用繼續了,所以必須加入條件判斷

i = 1
subdat = dat[dat$Patient==levels.Patient[i],]
n.date = length(subdat$Date)
if (n.date>1) {
  dif = rep(NA, n.date-1)
  for (k in 1:(n.date-1)) {
    dif[k] = subdat$Date[k+1] - subdat$Date[k]
  }
}
dif
## [1]   38 1493
i = 1
subdat = dat[dat$Patient==levels.Patient[i],]
n.date = length(subdat$Date)
if (n.date>1) {
  dif = diff(subdat$Date)
}
dif
## Time differences in days
## [1]   38 1493

第二節:驗證規則設定-2(4)

i = 1
subdat = dat[dat$Patient==levels.Patient[i],]
n.date = length(subdat$Date)
if (n.date>1) {
  dif = diff(subdat$Date)
  check = dif < 90
}
check
## [1]  TRUE FALSE
i = 1
subdat = dat[dat$Patient==levels.Patient[i],]
n.date = length(subdat$Date)
if (n.date>1) {
  dif = diff(subdat$Date)
  check = dif < 90
}
TRUE %in% check
## [1] TRUE
i = 1
subdat = dat[dat$Patient==levels.Patient[i],]
n.date = length(subdat$Date)
if (n.date>1) {
  dif = diff(subdat$Date)
  check = dif < 90
  x[i] = TRUE %in% check
} else {
  x[i] = FALSE
}

第二節:驗證規則設定-2(5)

levels.Patient = levels(as.factor(dat$Patient))
n.Patient = length(levels.Patient)
x = rep(NA, n.Patient)

for (i in 1:n.Patient) {
  subdat = dat[dat$Patient==levels.Patient[i],]
  n.date = length(subdat$Date)
  if (n.date>1) {
    dif = diff(subdat$Date)
    check = dif < 90
    x[i] = TRUE %in% check
  } else {
    x[i] = FALSE
  }
}

x
##    [1]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE
##   [12]  TRUE FALSE  TRUE  TRUE  TRUE FALSE FALSE  TRUE  TRUE  TRUE  TRUE
##   [23] FALSE  TRUE  TRUE  TRUE FALSE  TRUE FALSE FALSE FALSE  TRUE  TRUE
##   [34]  TRUE  TRUE  TRUE  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE  TRUE
##   [45]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
##   [56]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
##   [67]  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
##   [78]  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE
##   [89] FALSE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE
##  [100]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE FALSE  TRUE  TRUE FALSE
##  [111]  TRUE  TRUE FALSE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE FALSE
##  [122]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE
##  [133]  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE
##  [144]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE  TRUE  TRUE  TRUE
##  [155]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE
##  [166] FALSE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE
##  [177]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
##  [188] FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE
##  [199] FALSE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE
##  [210]  TRUE FALSE  TRUE  TRUE  TRUE  TRUE FALSE FALSE  TRUE  TRUE  TRUE
##  [221]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
##  [232]  TRUE FALSE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
##  [243]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
##  [254]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE FALSE
##  [265]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE
##  [276]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE FALSE  TRUE
##  [287]  TRUE  TRUE  TRUE  TRUE FALSE  TRUE FALSE  TRUE  TRUE FALSE  TRUE
##  [298]  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE FALSE
##  [309]  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
##  [320]  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE
##  [331]  TRUE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE FALSE
##  [342]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
##  [353]  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
##  [364]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE FALSE  TRUE  TRUE  TRUE
##  [375]  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE
##  [386]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE  TRUE
##  [397]  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
##  [408] FALSE FALSE  TRUE  TRUE FALSE FALSE  TRUE FALSE  TRUE  TRUE  TRUE
##  [419]  TRUE  TRUE FALSE  TRUE  TRUE FALSE FALSE  TRUE  TRUE  TRUE FALSE
##  [430] FALSE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE
##  [441]  TRUE  TRUE  TRUE FALSE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE
##  [452] FALSE  TRUE  TRUE  TRUE  TRUE FALSE FALSE  TRUE  TRUE  TRUE  TRUE
##  [463]  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE
##  [474] FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
##  [485] FALSE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE
##  [496]  TRUE  TRUE  TRUE FALSE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE FALSE
##  [507]  TRUE  TRUE FALSE FALSE FALSE  TRUE FALSE FALSE  TRUE  TRUE  TRUE
##  [518] FALSE  TRUE  TRUE  TRUE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE
##  [529]  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE
##  [540]  TRUE FALSE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE
##  [551]  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE
##  [562]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE
##  [573] FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
##  [584] FALSE FALSE  TRUE FALSE FALSE FALSE  TRUE FALSE  TRUE  TRUE  TRUE
##  [595] FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
##  [606] FALSE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE FALSE
##  [617] FALSE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
##  [628]  TRUE FALSE  TRUE  TRUE  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE
##  [639]  TRUE FALSE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE
##  [650] FALSE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE FALSE FALSE
##  [661] FALSE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
##  [672]  TRUE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
##  [683] FALSE  TRUE FALSE  TRUE FALSE FALSE  TRUE  TRUE FALSE FALSE  TRUE
##  [694]  TRUE FALSE FALSE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE FALSE  TRUE
##  [705]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE
##  [716]  TRUE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE FALSE FALSE  TRUE
##  [727] FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE
##  [738] FALSE  TRUE  TRUE  TRUE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE
##  [749] FALSE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE  TRUE  TRUE FALSE
##  [760]  TRUE FALSE FALSE  TRUE  TRUE  TRUE  TRUE FALSE FALSE  TRUE FALSE
##  [771]  TRUE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
##  [782]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE FALSE
##  [793]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE
##  [804] FALSE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE
##  [815] FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE  TRUE  TRUE FALSE  TRUE
##  [826]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE
##  [837]  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE
##  [848]  TRUE  TRUE  TRUE FALSE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE FALSE
##  [859]  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
##  [870]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE
##  [881] FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE
##  [892]  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE
##  [903] FALSE FALSE  TRUE  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE  TRUE
##  [914]  TRUE FALSE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE FALSE FALSE FALSE
##  [925] FALSE  TRUE  TRUE FALSE FALSE FALSE  TRUE  TRUE FALSE  TRUE  TRUE
##  [936] FALSE FALSE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE
##  [947] FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE
##  [958] FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE
##  [969] FALSE FALSE  TRUE  TRUE  TRUE  TRUE FALSE FALSE  TRUE  TRUE  TRUE
##  [980]  TRUE  TRUE FALSE  TRUE  TRUE FALSE FALSE FALSE  TRUE  TRUE FALSE
##  [991]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE  TRUE  TRUE  TRUE
## [1002] FALSE  TRUE  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE FALSE
## [1013]  TRUE  TRUE  TRUE  TRUE FALSE FALSE  TRUE FALSE  TRUE  TRUE  TRUE
## [1024]  TRUE FALSE  TRUE FALSE  TRUE FALSE FALSE  TRUE FALSE  TRUE  TRUE
## [1035]  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE FALSE  TRUE FALSE
## [1046] FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE
## [1057]  TRUE  TRUE FALSE FALSE FALSE  TRUE  TRUE  TRUE FALSE FALSE  TRUE
## [1068]  TRUE FALSE  TRUE FALSE  TRUE  TRUE FALSE FALSE FALSE FALSE  TRUE
## [1079] FALSE  TRUE  TRUE FALSE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE FALSE
## [1090] FALSE FALSE FALSE FALSE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE
## [1101]  TRUE  TRUE FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE
## [1112]  TRUE FALSE FALSE  TRUE  TRUE FALSE FALSE FALSE  TRUE  TRUE  TRUE
## [1123] FALSE FALSE FALSE FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE
## [1134]  TRUE FALSE FALSE FALSE  TRUE  TRUE  TRUE FALSE  TRUE FALSE  TRUE
## [1145] FALSE  TRUE FALSE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE  TRUE
## [1156]  TRUE FALSE FALSE  TRUE  TRUE FALSE  TRUE  TRUE FALSE FALSE  TRUE
## [1167]  TRUE FALSE  TRUE  TRUE  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE
## [1178] FALSE FALSE  TRUE  TRUE  TRUE FALSE FALSE FALSE  TRUE  TRUE FALSE
## [1189]  TRUE  TRUE FALSE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE FALSE
## [1200] FALSE  TRUE FALSE FALSE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE
## [1211] FALSE  TRUE  TRUE FALSE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE
## [1222] FALSE  TRUE FALSE  TRUE FALSE  TRUE  TRUE FALSE  TRUE FALSE  TRUE
## [1233]  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE
## [1244]  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE
## [1255]  TRUE  TRUE FALSE FALSE  TRUE FALSE  TRUE FALSE FALSE  TRUE  TRUE
## [1266]  TRUE FALSE FALSE FALSE  TRUE  TRUE FALSE FALSE  TRUE  TRUE  TRUE
## [1277] FALSE FALSE  TRUE  TRUE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE
## [1288] FALSE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE FALSE FALSE  TRUE  TRUE
## [1299] FALSE  TRUE  TRUE  TRUE FALSE FALSE  TRUE FALSE  TRUE FALSE FALSE
## [1310]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE  TRUE  TRUE  TRUE FALSE
## [1321]  TRUE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE
## [1332] FALSE  TRUE  TRUE FALSE  TRUE  TRUE FALSE FALSE FALSE  TRUE  TRUE
## [1343]  TRUE  TRUE FALSE FALSE  TRUE FALSE FALSE  TRUE  TRUE FALSE  TRUE
## [1354] FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE
## [1365]  TRUE FALSE  TRUE  TRUE  TRUE FALSE FALSE FALSE  TRUE FALSE  TRUE
## [1376]  TRUE FALSE  TRUE  TRUE FALSE  TRUE  TRUE FALSE  TRUE  TRUE FALSE
## [1387]  TRUE FALSE FALSE  TRUE FALSE  TRUE  TRUE FALSE  TRUE FALSE  TRUE
## [1398]  TRUE FALSE FALSE  TRUE  TRUE FALSE  TRUE FALSE  TRUE FALSE FALSE
## [1409] FALSE  TRUE FALSE FALSE  TRUE FALSE  TRUE  TRUE FALSE FALSE FALSE
## [1420] FALSE  TRUE FALSE FALSE FALSE  TRUE  TRUE  TRUE FALSE FALSE  TRUE
## [1431] FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE
## [1442] FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE FALSE  TRUE FALSE  TRUE
## [1453] FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE  TRUE
## [1464] FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE
## [1475]  TRUE FALSE  TRUE FALSE FALSE  TRUE  TRUE FALSE FALSE  TRUE  TRUE
## [1486] FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE
## [1497]  TRUE FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE FALSE FALSE FALSE
## [1508] FALSE  TRUE  TRUE FALSE FALSE FALSE  TRUE  TRUE FALSE  TRUE FALSE
## [1519]  TRUE FALSE  TRUE FALSE FALSE  TRUE  TRUE  TRUE FALSE FALSE  TRUE
## [1530]  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1541] FALSE FALSE FALSE  TRUE  TRUE FALSE  TRUE  TRUE FALSE FALSE FALSE
## [1552] FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE FALSE  TRUE  TRUE FALSE
## [1563] FALSE FALSE  TRUE FALSE  TRUE FALSE FALSE FALSE  TRUE  TRUE  TRUE
## [1574]  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE FALSE  TRUE FALSE  TRUE
## [1585]  TRUE  TRUE FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE
## [1596]  TRUE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE
## [1607] FALSE FALSE FALSE FALSE  TRUE FALSE  TRUE FALSE FALSE  TRUE FALSE
## [1618]  TRUE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE  TRUE
## [1629]  TRUE  TRUE FALSE  TRUE FALSE FALSE  TRUE FALSE  TRUE  TRUE  TRUE
## [1640]  TRUE  TRUE FALSE FALSE FALSE  TRUE  TRUE FALSE  TRUE FALSE  TRUE
## [1651] FALSE  TRUE FALSE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE FALSE FALSE
## [1662] FALSE FALSE FALSE FALSE FALSE  TRUE FALSE  TRUE  TRUE  TRUE FALSE
## [1673]  TRUE  TRUE FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE  TRUE  TRUE
## [1684] FALSE FALSE  TRUE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE
## [1695] FALSE FALSE FALSE  TRUE FALSE  TRUE FALSE  TRUE  TRUE FALSE  TRUE
## [1706] FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE FALSE FALSE
## [1717] FALSE FALSE  TRUE  TRUE FALSE FALSE  TRUE  TRUE  TRUE FALSE FALSE
## [1728]  TRUE  TRUE FALSE FALSE FALSE FALSE  TRUE FALSE  TRUE FALSE FALSE
## [1739]  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE
## [1750]  TRUE  TRUE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE
## [1761] FALSE FALSE FALSE  TRUE  TRUE FALSE  TRUE  TRUE FALSE FALSE FALSE
## [1772]  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE  TRUE
## [1783] FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE
## [1794] FALSE FALSE FALSE  TRUE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE
## [1805]  TRUE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE
## [1816]  TRUE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE
## [1827]  TRUE FALSE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE  TRUE  TRUE
## [1838] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE
## [1849] FALSE FALSE  TRUE  TRUE FALSE FALSE  TRUE FALSE  TRUE  TRUE FALSE
## [1860] FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE FALSE  TRUE
## [1871] FALSE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE FALSE FALSE  TRUE  TRUE
## [1882] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE
## [1893] FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1904] FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE FALSE
## [1915]  TRUE  TRUE  TRUE FALSE FALSE  TRUE FALSE FALSE FALSE  TRUE FALSE
## [1926] FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE  TRUE FALSE  TRUE
## [1937]  TRUE FALSE FALSE FALSE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE
## [1948]  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE  TRUE
## [1959]  TRUE FALSE FALSE  TRUE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE
## [1970] FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE
## [1981] FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE
## [1992]  TRUE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE FALSE FALSE FALSE
## [2003]  TRUE FALSE FALSE  TRUE  TRUE FALSE FALSE  TRUE FALSE  TRUE  TRUE
## [2014]  TRUE FALSE  TRUE  TRUE  TRUE FALSE FALSE  TRUE  TRUE FALSE FALSE
## [2025] FALSE  TRUE  TRUE FALSE FALSE FALSE  TRUE FALSE  TRUE  TRUE FALSE
## [2036]  TRUE FALSE  TRUE  TRUE FALSE FALSE  TRUE  TRUE  TRUE FALSE  TRUE
## [2047] FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE
## [2058] FALSE FALSE FALSE FALSE FALSE  TRUE FALSE  TRUE  TRUE  TRUE FALSE
## [2069]  TRUE FALSE  TRUE FALSE FALSE FALSE  TRUE FALSE  TRUE FALSE FALSE
## [2080]  TRUE FALSE FALSE  TRUE  TRUE FALSE FALSE  TRUE FALSE  TRUE FALSE
## [2091] FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE  TRUE FALSE FALSE  TRUE
## [2102] FALSE  TRUE  TRUE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE
## [2113] FALSE  TRUE  TRUE FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE FALSE
## [2124]  TRUE FALSE  TRUE  TRUE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE
## [2135] FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE  TRUE FALSE FALSE  TRUE
## [2146] FALSE FALSE FALSE  TRUE  TRUE  TRUE FALSE FALSE  TRUE FALSE FALSE
## [2157] FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE  TRUE FALSE  TRUE  TRUE
## [2168]  TRUE  TRUE FALSE FALSE  TRUE FALSE FALSE FALSE  TRUE  TRUE FALSE
## [2179] FALSE FALSE FALSE FALSE  TRUE FALSE  TRUE  TRUE FALSE  TRUE FALSE
## [2190] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE
## [2201]  TRUE  TRUE FALSE FALSE  TRUE FALSE  TRUE FALSE FALSE FALSE FALSE
## [2212]  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE
## [2223]  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE
## [2234]  TRUE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [2245] FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE  TRUE FALSE FALSE
## [2256] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [2267] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [2278] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [2289] FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [2300] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
levels.Patient[x]
##    [1] "1"    "2"    "3"    "4"    "5"    "6"    "7"    "8"    "9"   
##   [10] "11"   "12"   "14"   "15"   "16"   "19"   "20"   "21"   "22"  
##   [19] "24"   "25"   "26"   "28"   "32"   "33"   "34"   "35"   "36"  
##   [28] "37"   "39"   "41"   "43"   "44"   "45"   "46"   "47"   "48"  
##   [37] "49"   "50"   "51"   "52"   "53"   "54"   "55"   "56"   "57"  
##   [46] "58"   "59"   "60"   "61"   "62"   "63"   "64"   "65"   "66"  
##   [55] "67"   "68"   "70"   "71"   "72"   "73"   "74"   "75"   "76"  
##   [64] "77"   "78"   "79"   "80"   "82"   "83"   "84"   "85"   "86"  
##   [73] "87"   "90"   "91"   "92"   "94"   "95"   "97"   "98"   "99"  
##   [82] "100"  "101"  "102"  "103"  "104"  "106"  "108"  "109"  "111" 
##   [91] "112"  "114"  "115"  "116"  "118"  "119"  "120"  "122"  "123" 
##  [100] "124"  "125"  "126"  "127"  "128"  "130"  "131"  "132"  "133" 
##  [109] "134"  "136"  "137"  "138"  "139"  "140"  "141"  "143"  "144" 
##  [118] "145"  "146"  "147"  "148"  "149"  "152"  "153"  "154"  "155" 
##  [127] "156"  "157"  "158"  "159"  "161"  "162"  "163"  "164"  "165" 
##  [136] "167"  "168"  "170"  "171"  "172"  "173"  "174"  "176"  "177" 
##  [145] "178"  "179"  "180"  "181"  "182"  "183"  "184"  "185"  "186" 
##  [154] "187"  "191"  "192"  "193"  "194"  "195"  "197"  "198"  "200" 
##  [163] "201"  "202"  "203"  "204"  "206"  "207"  "208"  "209"  "210" 
##  [172] "212"  "213"  "214"  "215"  "218"  "219"  "220"  "221"  "222" 
##  [181] "223"  "224"  "225"  "226"  "227"  "228"  "229"  "230"  "231" 
##  [190] "232"  "234"  "236"  "237"  "238"  "239"  "240"  "241"  "242" 
##  [199] "243"  "244"  "245"  "246"  "247"  "248"  "249"  "250"  "251" 
##  [208] "252"  "253"  "254"  "255"  "256"  "257"  "258"  "259"  "260" 
##  [217] "261"  "263"  "265"  "266"  "267"  "268"  "269"  "270"  "271" 
##  [226] "272"  "274"  "275"  "276"  "277"  "278"  "279"  "280"  "281" 
##  [235] "283"  "284"  "286"  "287"  "288"  "289"  "290"  "292"  "294" 
##  [244] "295"  "297"  "298"  "300"  "301"  "302"  "303"  "304"  "305" 
##  [253] "307"  "309"  "310"  "311"  "312"  "314"  "315"  "316"  "317" 
##  [262] "318"  "319"  "320"  "321"  "323"  "324"  "325"  "326"  "327" 
##  [271] "328"  "331"  "335"  "336"  "337"  "338"  "340"  "342"  "343" 
##  [280] "344"  "345"  "346"  "347"  "348"  "349"  "350"  "351"  "352" 
##  [289] "353"  "354"  "355"  "357"  "358"  "359"  "360"  "361"  "362" 
##  [298] "363"  "364"  "365"  "366"  "367"  "368"  "370"  "372"  "373" 
##  [307] "374"  "375"  "376"  "377"  "378"  "380"  "381"  "382"  "383" 
##  [316] "384"  "386"  "387"  "388"  "389"  "390"  "391"  "392"  "393" 
##  [325] "396"  "397"  "398"  "400"  "401"  "402"  "403"  "404"  "405" 
##  [334] "406"  "407"  "410"  "411"  "414"  "416"  "417"  "418"  "419" 
##  [343] "420"  "422"  "423"  "426"  "427"  "428"  "431"  "432"  "433" 
##  [352] "435"  "436"  "437"  "439"  "440"  "441"  "442"  "443"  "445" 
##  [361] "447"  "448"  "449"  "450"  "451"  "453"  "454"  "455"  "456" 
##  [370] "459"  "460"  "461"  "462"  "463"  "465"  "466"  "467"  "468" 
##  [379] "469"  "470"  "472"  "473"  "475"  "476"  "477"  "478"  "479" 
##  [388] "480"  "481"  "482"  "483"  "484"  "486"  "487"  "488"  "490" 
##  [397] "491"  "492"  "494"  "495"  "496"  "497"  "498"  "500"  "502" 
##  [406] "503"  "504"  "505"  "507"  "508"  "512"  "515"  "516"  "517" 
##  [415] "519"  "520"  "521"  "525"  "526"  "527"  "528"  "529"  "530" 
##  [424] "531"  "533"  "534"  "535"  "536"  "537"  "539"  "540"  "542" 
##  [433] "543"  "544"  "546"  "547"  "548"  "549"  "550"  "551"  "552" 
##  [442] "553"  "554"  "556"  "557"  "558"  "559"  "560"  "562"  "563" 
##  [451] "564"  "565"  "566"  "567"  "568"  "570"  "571"  "572"  "574" 
##  [460] "575"  "576"  "577"  "578"  "579"  "580"  "581"  "582"  "583" 
##  [469] "586"  "590"  "592"  "593"  "594"  "596"  "597"  "598"  "599" 
##  [478] "600"  "601"  "602"  "603"  "604"  "605"  "607"  "609"  "610" 
##  [487] "611"  "612"  "613"  "615"  "618"  "619"  "621"  "622"  "623" 
##  [496] "624"  "625"  "626"  "627"  "628"  "630"  "631"  "632"  "634" 
##  [505] "636"  "638"  "639"  "641"  "643"  "644"  "645"  "646"  "647" 
##  [514] "649"  "651"  "652"  "653"  "655"  "656"  "657"  "658"  "662" 
##  [523] "663"  "664"  "666"  "667"  "668"  "669"  "670"  "671"  "672" 
##  [532] "677"  "678"  "679"  "680"  "681"  "682"  "684"  "686"  "689" 
##  [541] "690"  "693"  "694"  "697"  "698"  "699"  "701"  "702"  "704" 
##  [550] "705"  "706"  "707"  "708"  "709"  "710"  "711"  "712"  "713" 
##  [559] "714"  "716"  "720"  "721"  "722"  "723"  "726"  "728"  "729" 
##  [568] "730"  "731"  "732"  "733"  "734"  "735"  "736"  "739"  "740" 
##  [577] "741"  "744"  "745"  "746"  "747"  "748"  "750"  "751"  "752" 
##  [586] "753"  "757"  "758"  "760"  "763"  "764"  "765"  "766"  "769" 
##  [595] "771"  "774"  "775"  "776"  "777"  "778"  "779"  "780"  "781" 
##  [604] "782"  "783"  "784"  "785"  "786"  "787"  "788"  "790"  "791" 
##  [613] "793"  "794"  "795"  "796"  "797"  "798"  "799"  "800"  "801" 
##  [622] "802"  "805"  "806"  "807"  "808"  "810"  "811"  "812"  "813" 
##  [631] "814"  "816"  "819"  "822"  "823"  "825"  "826"  "827"  "828" 
##  [640] "829"  "830"  "831"  "832"  "834"  "835"  "836"  "837"  "838" 
##  [649] "839"  "841"  "842"  "843"  "844"  "846"  "847"  "848"  "849" 
##  [658] "850"  "852"  "854"  "855"  "856"  "857"  "859"  "860"  "861" 
##  [667] "862"  "864"  "865"  "866"  "867"  "868"  "869"  "870"  "871" 
##  [676] "872"  "873"  "874"  "875"  "882"  "883"  "884"  "885"  "886" 
##  [685] "887"  "889"  "890"  "891"  "892"  "893"  "894"  "895"  "897" 
##  [694] "898"  "899"  "901"  "902"  "905"  "906"  "908"  "910"  "912" 
##  [703] "913"  "914"  "916"  "917"  "918"  "919"  "921"  "926"  "927" 
##  [712] "931"  "932"  "934"  "935"  "938"  "940"  "941"  "942"  "943" 
##  [721] "945"  "946"  "948"  "949"  "950"  "951"  "952"  "953"  "954" 
##  [730] "956"  "957"  "960"  "961"  "962"  "963"  "964"  "965"  "967" 
##  [739] "968"  "971"  "972"  "973"  "974"  "977"  "978"  "979"  "980" 
##  [748] "981"  "983"  "984"  "988"  "989"  "991"  "992"  "993"  "994" 
##  [757] "995"  "996"  "999"  "1000" "1001" "1003" "1004" "1006" "1008"
##  [766] "1010" "1013" "1014" "1015" "1016" "1019" "1021" "1022" "1023"
##  [775] "1024" "1026" "1028" "1031" "1033" "1034" "1035" "1036" "1037"
##  [784] "1038" "1040" "1041" "1042" "1044" "1048" "1049" "1050" "1051"
##  [793] "1052" "1053" "1057" "1058" "1062" "1063" "1064" "1067" "1068"
##  [802] "1070" "1072" "1073" "1078" "1080" "1081" "1083" "1084" "1086"
##  [811] "1087" "1088" "1094" "1096" "1097" "1098" "1099" "1100" "1101"
##  [820] "1102" "1104" "1109" "1112" "1115" "1116" "1120" "1121" "1122"
##  [829] "1127" "1129" "1131" "1133" "1134" "1138" "1139" "1140" "1142"
##  [838] "1144" "1146" "1148" "1149" "1150" "1155" "1156" "1159" "1160"
##  [847] "1162" "1163" "1166" "1167" "1169" "1170" "1171" "1173" "1175"
##  [856] "1177" "1180" "1181" "1182" "1186" "1187" "1189" "1190" "1192"
##  [865] "1193" "1194" "1196" "1197" "1198" "1201" "1204" "1205" "1207"
##  [874] "1208" "1209" "1210" "1212" "1213" "1215" "1216" "1218" "1219"
##  [883] "1220" "1221" "1223" "1225" "1227" "1228" "1230" "1232" "1233"
##  [892] "1234" "1235" "1237" "1238" "1239" "1240" "1241" "1244" "1245"
##  [901] "1247" "1248" "1249" "1250" "1251" "1253" "1254" "1255" "1256"
##  [910] "1259" "1261" "1264" "1265" "1266" "1270" "1271" "1274" "1275"
##  [919] "1276" "1279" "1280" "1283" "1284" "1285" "1286" "1287" "1289"
##  [928] "1290" "1292" "1293" "1294" "1297" "1298" "1300" "1301" "1302"
##  [937] "1305" "1307" "1310" "1311" "1312" "1313" "1314" "1317" "1318"
##  [946] "1319" "1321" "1325" "1326" "1327" "1328" "1330" "1331" "1333"
##  [955] "1334" "1336" "1337" "1341" "1342" "1343" "1344" "1347" "1350"
##  [964] "1351" "1353" "1358" "1359" "1360" "1361" "1363" "1364" "1365"
##  [973] "1367" "1368" "1369" "1373" "1375" "1376" "1378" "1379" "1381"
##  [982] "1382" "1384" "1385" "1387" "1390" "1392" "1393" "1395" "1397"
##  [991] "1398" "1401" "1402" "1404" "1406" "1410" "1413" "1415" "1416"
## [1000] "1421" "1425" "1426" "1427" "1430" "1434" "1435" "1436" "1437"
## [1009] "1438" "1439" "1443" "1446" "1450" "1452" "1455" "1456" "1457"
## [1018] "1458" "1459" "1463" "1466" "1469" "1472" "1475" "1477" "1480"
## [1027] "1481" "1484" "1485" "1488" "1491" "1496" "1497" "1502" "1503"
## [1036] "1509" "1510" "1514" "1515" "1517" "1519" "1521" "1524" "1525"
## [1045] "1526" "1529" "1530" "1531" "1532" "1533" "1544" "1545" "1547"
## [1054] "1548" "1553" "1556" "1560" "1561" "1565" "1567" "1571" "1572"
## [1063] "1573" "1574" "1575" "1576" "1578" "1579" "1580" "1582" "1584"
## [1072] "1585" "1586" "1588" "1593" "1594" "1596" "1601" "1611" "1613"
## [1081] "1616" "1618" "1622" "1627" "1628" "1629" "1630" "1632" "1635"
## [1090] "1637" "1638" "1639" "1640" "1641" "1645" "1646" "1648" "1650"
## [1099] "1652" "1654" "1655" "1657" "1658" "1659" "1667" "1669" "1670"
## [1108] "1671" "1673" "1674" "1676" "1679" "1682" "1683" "1686" "1690"
## [1117] "1698" "1700" "1702" "1703" "1705" "1707" "1709" "1711" "1713"
## [1126] "1719" "1720" "1723" "1724" "1725" "1728" "1729" "1734" "1736"
## [1135] "1739" "1747" "1750" "1751" "1755" "1760" "1764" "1765" "1767"
## [1144] "1768" "1772" "1774" "1775" "1776" "1777" "1778" "1782" "1784"
## [1153] "1786" "1788" "1791" "1797" "1799" "1805" "1809" "1815" "1816"
## [1162] "1819" "1824" "1827" "1829" "1830" "1831" "1836" "1837" "1848"
## [1171] "1851" "1852" "1855" "1857" "1858" "1861" "1866" "1867" "1868"
## [1180] "1870" "1872" "1874" "1875" "1876" "1877" "1880" "1881" "1891"
## [1189] "1895" "1905" "1908" "1911" "1915" "1916" "1917" "1920" "1924"
## [1198] "1927" "1929" "1931" "1933" "1934" "1936" "1937" "1941" "1942"
## [1207] "1943" "1945" "1946" "1947" "1948" "1950" "1951" "1952" "1953"
## [1216] "1954" "1958" "1959" "1962" "1966" "1967" "1968" "1969" "1973"
## [1225] "1979" "1982" "1984" "1986" "1991" "1992" "1997" "1998" "1999"
## [1234] "2003" "2006" "2007" "2010" "2012" "2013" "2014" "2016" "2017"
## [1243] "2018" "2021" "2022" "2026" "2027" "2031" "2033" "2034" "2036"
## [1252] "2038" "2039" "2042" "2043" "2044" "2046" "2050" "2051" "2052"
## [1261] "2053" "2063" "2065" "2066" "2067" "2069" "2071" "2075" "2077"
## [1270] "2080" "2083" "2084" "2087" "2089" "2093" "2096" "2098" "2101"
## [1279] "2103" "2104" "2106" "2112" "2114" "2115" "2120" "2121" "2124"
## [1288] "2126" "2127" "2131" "2137" "2140" "2142" "2145" "2149" "2150"
## [1297] "2151" "2154" "2161" "2162" "2164" "2166" "2167" "2168" "2169"
## [1306] "2172" "2176" "2177" "2183" "2185" "2186" "2188" "2200" "2201"
## [1315] "2202" "2205" "2207" "2212" "2213" "2214" "2220" "2221" "2222"
## [1324] "2223" "2224" "2232" "2234" "2236" "2249" "2253" "2291"
dat$Wrong.Date_interval = dat$Patient %in% levels.Patient[x]

練習2:檢查GFR的變化量

– 在計算變化量的時候,同時要注意追蹤時間間格

n = 100
pb = txtProgressBar(max = n, style=3)
for(i in 1:n) {
  Sys.sleep(0.1)
  setTxtProgressBar(pb, i)
}
close(pb)

練習2答案

#Read data
dat = read.csv("data4_1.csv", header = TRUE, fileEncoding = 'CP950') 

#Rule 1: check date-format
dat$Date = as.Date(dat[,"Date"])
dat$Wrong.Date = is.na(dat$Date)
dat = dat[dat$Wrong.Date == FALSE,]

#Rule 2: check eGFR change
levels.Patient = levels(as.factor(dat$Patient))
n.Patient = length(levels.Patient)
x = rep(NA, n.Patient)

pb = txtProgressBar(max = n, style = n.Patient)
for (i in 1:n.Patient) {
  subdat = dat[dat$Patient==levels.Patient[i],]
  n.date = length(subdat$Date)
  if (n.date>1) {
    diff_eGFR = diff(subdat$MDRD.GFR)
    diff_date = as.numeric(diff(subdat$Date), units = 'days') # 注意要轉成數字,否則無法相除
    slope = diff_eGFR / diff_date * 30
    check = (slope < -2 | slope > 2) # 也可以用「check = abs(slope) > 2」
    x[i] = TRUE %in% check
  } else {
    x[i] = FALSE
  }
  setTxtProgressBar(pb, i)
}
close(pb)

dat$Wrong.eGFR_change = dat$Patient %in% levels.Patient[x]

第三節:驗證規則設定-3(1)

– 首先,先創造一個新變項,在這裡我們是直接把舊的變數『Wrong.Date_interval』直接洗掉

dat$Wrong.Date_interval = NA

– 我們先把個案換成第123個人,因為他的變化比較大

i = 123
dat[dat$Patient==levels.Patient[i],c("Patient", "Date", "Wrong.Date_interval")]
##       Patient       Date Wrong.Date_interval
## 12452     123 2006-08-06                  NA
## 12453     123 2006-09-19                  NA
## 12454     123 2007-01-02                  NA
## 12455     123 2007-02-11                  NA
## 12456     123 2007-03-01                  NA
## 12457     123 2007-06-26                  NA
## 12458     123 2007-07-23                  NA
## 12459     123 2007-09-26                  NA
## 12460     123 2007-10-26                  NA
## 12461     123 2007-12-04                  NA
## 12462     123 2007-12-13                  NA
## 12463     123 2008-01-26                  NA
i = 123
dat[dat$Patient==levels.Patient[i],"Wrong.Date_interval"][1] = FALSE
dat[dat$Patient==levels.Patient[i],c("Patient", "Date", "Wrong.Date_interval")]
##       Patient       Date Wrong.Date_interval
## 12452     123 2006-08-06               FALSE
## 12453     123 2006-09-19                  NA
## 12454     123 2007-01-02                  NA
## 12455     123 2007-02-11                  NA
## 12456     123 2007-03-01                  NA
## 12457     123 2007-06-26                  NA
## 12458     123 2007-07-23                  NA
## 12459     123 2007-09-26                  NA
## 12460     123 2007-10-26                  NA
## 12461     123 2007-12-04                  NA
## 12462     123 2007-12-13                  NA
## 12463     123 2008-01-26                  NA

第三節:驗證規則設定-3(2)

– 值得注意的是,這位病患在『2007-06-26』、『2007-07-23』、『2007-09-26』這三天分別被申報,其間格分別是27與65,雖然『2007-07-23』必須被核刪,但考慮到刪除這天後,『2007-09-26』與『2007-06-26』就相距92天,這是一個可以接受的日期,所以我們必須想一下,該怎麼解決這件事。

– 記得避免遺漏值!

i = 123
dat[dat$Patient==levels.Patient[i],"Wrong.Date_interval"][1] = FALSE
n.date = length(dat[dat$Patient==levels.Patient[i],"Date"])

k = 2
false.dates = dat[dat$Patient==levels.Patient[i] & dat$Wrong.Date_interval == FALSE & !is.na(dat$Wrong.Date_interval),"Date"]
last.date = false.dates[length(false.dates)]
dif = dat[dat$Patient==levels.Patient[i],"Date"][k] - last.date
dat[dat$Patient==levels.Patient[i],"Wrong.Date_interval"][k] = dif < 90

dat[dat$Patient==levels.Patient[i],c("Patient", "Date", "Wrong.Date_interval")]
##       Patient       Date Wrong.Date_interval
## 12452     123 2006-08-06               FALSE
## 12453     123 2006-09-19                TRUE
## 12454     123 2007-01-02                  NA
## 12455     123 2007-02-11                  NA
## 12456     123 2007-03-01                  NA
## 12457     123 2007-06-26                  NA
## 12458     123 2007-07-23                  NA
## 12459     123 2007-09-26                  NA
## 12460     123 2007-10-26                  NA
## 12461     123 2007-12-04                  NA
## 12462     123 2007-12-13                  NA
## 12463     123 2008-01-26                  NA

第三節:驗證規則設定-3(3)

– 需要注意的是,如果n.date>1才需要做後續檢查

levels.Patient = levels(as.factor(dat$Patient))
n.Patient = length(levels.Patient)
dat$Wrong.Date_interval = NA

pb = txtProgressBar(max = n.Patient, style=3)

for (i in 1:n.Patient) {
  dat[dat$Patient==levels.Patient[i],"Wrong.Date_interval"][1] = FALSE
  n.date = length(dat[dat$Patient==levels.Patient[i],"Date"])
  if (n.date>1) {
    for (k in 2:n.date) {
      false.dates = dat[dat$Patient==levels.Patient[i] & dat$Wrong.Date_interval == FALSE & !is.na(dat$Wrong.Date_interval),"Date"]
      last.date = false.dates[length(false.dates)]
      dif = dat[dat$Patient==levels.Patient[i],"Date"][k] - last.date
      dat[dat$Patient==levels.Patient[i],"Wrong.Date_interval"][k] = dif < 90
    }
  }
  setTxtProgressBar(pb, i)
}

close(pb)

練習3:把剛剛學到的推廣到GFR的變化量

– 因此請透過類似的方法找出GFR的異常值,如果出現短時間內變化過大的值請把它找出來,之後在檢查時請忽略它!

練習3答案

#Read data
dat = read.csv("data4_1.csv", header = TRUE, fileEncoding = 'CP950') 

#Rule 1: check date-format
dat$Date = as.Date(dat[,"Date"])
dat$Wrong.Date = is.na(dat$Date)
dat = dat[dat$Wrong.Date == FALSE,]

#Rule 2: check eGFR change
levels.Patient = levels(as.factor(dat$Patient))
n.Patient = length(levels.Patient)
dat$Wrong.eGFR_change = NA

pb = txtProgressBar(max = n.Patient, style=3)

for (i in 1:n.Patient) {
  dat[dat$Patient==levels.Patient[i], "Wrong.eGFR_change"][1] = FALSE
  n.date = length(dat[dat$Patient==levels.Patient[i],"Date"])
  if (n.date>1) {
    for (k in 2:n.date) {
      false.dates = dat[dat$Patient==levels.Patient[i] & dat$Wrong.eGFR_change == FALSE & !is.na(dat$Wrong.eGFR_change),"Date"]
      last.date = false.dates[length(false.dates)]
      diff_date = dat[dat$Patient==levels.Patient[i],"Date"][k] - last.date
      diff_date = as.numeric(diff_date, units = 'days') # 注意要轉成數字,否則無法相除

      false.eGFRs = dat[dat$Patient==levels.Patient[i] & dat$Wrong.eGFR_change == FALSE & !is.na(dat$Wrong.eGFR_change),"MDRD.GFR"]
      last.eGFR = false.eGFRs[length(false.eGFRs)]
      diff_eGFR = dat[dat$Patient==levels.Patient[i],"MDRD.GFR"][k] - last.eGFR
      
      dat[dat$Patient==levels.Patient[i],"Wrong.eGFR_change"][k] = abs(slope) > 2
    }
  }
  setTxtProgressBar(pb, i)
}

close(pb)

小結

– 目前為止有跟上進度的同學,應該可以建立一個資料處理pipline,不管原始蒐集的資料為何,都能透過一系列的轉換&品質控制,獲得乾淨的資料

– 你應該已經學會下面的功能:

  1. 資料讀入及寫出
  2. 資料清理
  3. 簡單資料合併
  4. 熟練的利用迴圈做大量重複的事
  5. 對於資料處理時的事前規劃
  6. 驗證規則的設定